using AgentFrameworkDemo.Models;
using Microsoft.Extensions.AI;

namespace AgentFrameworkDemo.Services;

/// <summary>
/// 模拟IChatClient实现（临时使用，等待真正的Microsoft Agent Framework API）
/// </summary>
public class MockChatClient : IChatClient
{
    private readonly AIModelConfig _modelConfig;

    public MockChatClient(AIModelConfig modelConfig)
    {
        _modelConfig = modelConfig;
    }

    public void Dispose()
    {
        // 模拟实现，无需清理资源
    }

    public async Task<ChatResponse> GetResponseAsync(
        IEnumerable<ChatMessage> chatMessages,
        ChatOptions? options = null,
        CancellationToken cancellationToken = default)
    {
        // 模拟异步延迟
        await Task.Delay(Random.Shared.Next(500, 1500), cancellationToken);

        var messages = chatMessages.ToList();
        var lastMessage = messages.LastOrDefault(m => m.Role == ChatRole.User);
        var userContent = lastMessage?.Text ?? "";

        var responseContent = GenerateMockResponse(userContent);

        return new ChatResponse(new ChatMessage(ChatRole.Assistant, responseContent))
        {
            CreatedAt = DateTime.UtcNow
        };
    }

    public IAsyncEnumerable<ChatResponseUpdate> GetStreamingResponseAsync(
        IEnumerable<ChatMessage> chatMessages,
        ChatOptions? options = null,
        CancellationToken cancellationToken = default)
    {
        // 简单的流式响应实现
        async IAsyncEnumerable<ChatResponseUpdate> StreamResponse()
        {
            var messages = chatMessages.ToList();
            var lastMessage = messages.LastOrDefault(m => m.Role == ChatRole.User);
            var userContent = lastMessage?.Text ?? "";
            var fullResponse = GenerateMockResponse(userContent);

            // 模拟流式输出，简化实现
            yield return new ChatResponseUpdate
            {
                CreatedAt = DateTime.UtcNow
            };
        }

        return StreamResponse();
    }

    private string GenerateMockResponse(string userInput)
    {
        // 根据用户输入生成模拟回复
        if (userInput.Contains("你好") || userInput.Contains("介绍"))
        {
            return "你好！我是一个基于Microsoft Agent Framework的AI助手。我可以帮助您解答问题、处理文本、计算数学问题和查询天气。请问有什么可以帮助您的吗？";
        }
        else if (userInput.Contains("计算"))
        {
            return "我可以帮您进行数学计算。请告诉我您想计算什么，比如：'123 + 456' 或者 '求平方根' 等。";
        }
        else if (userInput.Contains("天气"))
        {
            return "我可以帮您查询天气信息。请告诉我您想查询哪个城市的天气，比如：'北京今天的天气怎么样？'";
        }
        else if (userInput.Contains("名字") || userInput.Contains("职业"))
        {
            return "我记得您！您是张三，是一名软件工程师。很高兴再次为您服务！";
        }
        else if (userInput.Contains("文本"))
        {
            if (userInput.Contains("Hello World"))
            {
                return "我已经帮您处理了文本 'Hello World'，转换为大写结果是：'HELLO WORLD'";
            }
            return "我可以帮您处理各种文本，包括大小写转换、长度计算、格式调整等。请告诉我您需要什么样的文本处理。";
        }
        else if (userInput.Contains("再见") || userInput.Contains("感谢"))
        {
            return "不客气！很高兴能帮助您。如果以后还有什么问题，随时可以找我。再见！";
        }
        else if (userInput.Contains("能力"))
        {
            return "我具有以下能力：\n1. 记忆功能 - 可以记住之前的对话内容\n2. 工具调用 - 可以进行数学计算、查询天气、处理文本等\n3. 多轮对话 - 支持上下文理解的连续对话\n4. 状态管理 - 可以暂停、恢复和追踪执行状态";
        }
        else
        {
            return $"感谢您的提问！基于您的问题'{userInput}'，我理解您需要相关帮助。作为Microsoft Agent Framework的演示，我目前使用模拟响应，但正式版本将连接真实的AI模型为您提供更准确的服务。";
        }
    }

    object? IChatClient.GetService(Type serviceType, object? serviceKey)
    {
        return null;
    }
}